home *** CD-ROM | disk | FTP | other *** search
/ BMUG Revelations / BMUG Revelations.toast / Programming / Programming Languages / UCB Logo 3.0 / CSLS / format < prev    next >
Text File  |  1992-09-04  |  2KB  |  128 lines

  1. TO ADDWORD :WORD
  2. IF NOT EMPTYP :LINE [MAKE "LINECOUNT :LINECOUNT+1]
  3. MAKE "LINE LPUT :WORD :LINE
  4. MAKE "LINECOUNT :LINECOUNT+COUNT :WORD
  5. END
  6.  
  7. TO BREAK
  8. IF EMPTYP :LINE [STOP]
  9. MAKE "LINECOUNT :WIDTH
  10. PUTLINE
  11. NEWINDENT
  12. IF :FILLING [SKIP :PARSKIP]
  13. END
  14.  
  15. TO FORMAT :FROM :TO
  16. OPENREAD :FROM
  17. OPENWRITE :TO
  18. SETREAD :FROM
  19. SETWRITE :TO
  20. INIT.VARS
  21. LOOP
  22. SETREAD []
  23. SETWRITE[]
  24. CLOSE :FROM
  25. CLOSE :TO
  26. END
  27.  
  28. TO INIT.VARS
  29. MAKE "PAGEHEIGHT 66
  30. MAKE "TOPMAR 6
  31. MAKE "LINES 54
  32. MAKE "LEFTMAR 7
  33. MAKE "WIDTH 65
  34. MAKE "FILLTAB 5
  35. MAKE "NOFILLTAB 0
  36. MAKE "PARSKIP 1
  37. MAKE "SPACING 1
  38. MAKE "STARTED "FALSE
  39. MAKE "FILLING "TRUE
  40. MAKE "PRINTED 0
  41. MAKE "INLINE []
  42. END
  43.  
  44. TO LOOP
  45. IF PROCESS NEXTWORD [STOP]
  46. LOOP
  47. END
  48.  
  49. TO NEWINDENT
  50. NEWLINE
  51. MAKE "INDENT IFELSE :FILLING [:FILLTAB] [:NOFILLTAB]
  52. MAKE "LINECOUNT :INDENT
  53. END
  54.  
  55. TO NEWLINE
  56. MAKE "LINE []
  57. MAKE "INDENT 0
  58. MAKE "LINECOUNT 0
  59. END
  60.  
  61. TO NEXTWORD
  62. IF NOT EMPTYP :INLINE [OP POPWORD FIRST :INLINE]
  63. IF NOT :FILLING [BREAK]
  64. MAKE "INLINE RL
  65. IF WORDP :INLINE [BREAK OP []]
  66. IF EMPTYP :INLINE [BREAK OP NEXTWORD]
  67. IF EQUALP FIRST RUNPARSE :INLINE "|*| [RUN BF RUNPARSE :INLINE MAKE "INLINE []]
  68. OP NEXTWORD
  69. END
  70.  
  71. TO NOFILL
  72. BREAK
  73. MAKE "FILLING "FALSE
  74. NEWINDENT
  75. END
  76.  
  77. TO POPWORD :NEXTWORD
  78. MAKE "INLINE BF :INLINE
  79. OP :NEXTWORD
  80. END
  81.  
  82. TO PROCESS :WORD
  83. IF LISTP :WORD [OP "TRUE]
  84. IF NOT :STARTED [START]
  85. IF (:LINECOUNT+1+COUNT :WORD) > :WIDTH [PUTLINE]
  86. ADDWORD :WORD
  87. OP "FALSE
  88. END
  89.  
  90. TO PUTLINE
  91. REPEAT :LEFTMAR+:INDENT [TYPE "| |]
  92. PUTWORDS :LINE ((COUNT :LINE)-1) (:WIDTH-:LINECOUNT) 0
  93. NEWLINE
  94. SKIP :SPACING
  95. END
  96.  
  97. TO PUTWORDS :LINE :SPACES :FILLER :PERWORD
  98. IF EMPTYP :LINE [STOP]
  99. TYPE FIRST :LINE
  100. IF :SPACES > 0 [MAKE "PERWORD INT ((:FILLER+:SPACES-1)/:SPACES)]
  101. IF :FILLER > 0 [REPEAT :PERWORD [TYPE "| |]]
  102. TYPE "| |
  103. PUTWORDS BF :LINE (:SPACES-1) (:FILLER-:PERWORD) 0
  104. END
  105.  
  106. TO SKIP :HOWMANY
  107. BREAK
  108. REPEAT :HOWMANY [PRINT []]
  109. MAKE "PRINTED :PRINTED+:HOWMANY
  110. IF :PRINTED < :LINES [STOP]
  111. REPEAT :PAGEHEIGHT-:PRINTED [PRINT []]
  112. MAKE "PRINTED 0
  113. END
  114.  
  115. TO START
  116. MAKE "STARTED "TRUE
  117. REPEAT :TOPMAR [PRINT []]
  118. NEWINDENT
  119. END
  120.  
  121. TO YESFILL
  122. BREAK
  123. IF NOT :FILLING [SKIP :PARSKIP]
  124. MAKE "FILLING "TRUE
  125. NEWINDENT
  126. END
  127.  
  128.